package br.edu.fa7.especializao.extremeprograming.tuita.bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import br.edu.fa7.especializao.extremeprograming.tuita.entity.Publicacao;
import br.edu.fa7.especializao.extremeprograming.tuita.entity.Tuiteiro;
import br.edu.fa7.especializao.extremeprograming.tuita.exception.ServiceException;
import br.edu.fa7.especializao.extremeprograming.tuita.service.PublicacaoService;
import br.edu.fa7.especializao.extremeprograming.tuita.service.TuiteiroService;
import br.edu.fa7.especializao.extremeprograming.tuita.util.TinyURLUtils;

@ManagedBean(name = "tuiteiroHomeBean")
public class TuiteiroHomeBean extends MB {

	private String usuario;
	private String url;

	public String getUrl() {
		return url;
	}


	public void setUrl(String url) {
		this.url = url;
	}

	@ManagedProperty("#{publicacaoService}")
	private PublicacaoService publicacaoService;
	
	@ManagedProperty("#{tuiteiroService}")
	private TuiteiroService tuiteiroService;

	private Publicacao publicacao;
	private Tuiteiro tuiteiro;
	private Tuiteiro seguido;
	private List<Publicacao> listapublicacoes = new ArrayList<Publicacao>();

	public List<Publicacao> getListapublicacoes() {
		listapublicacoes = tuiteiroService.buscarPublicacoesSeguidores(tuiteiro);		
		return listapublicacoes;
	}
	

	public Tuiteiro getSeguido() {
		seguido = new Tuiteiro();
		return seguido;
	}

	public void setSeguido(Tuiteiro seguido) {
		this.seguido = seguido;
	}

	public Tuiteiro getTuiteiro() {
		try {
			tuiteiro = (Tuiteiro) getSession().getAttribute("tuiteiroLogado");
			if (tuiteiro == null
					|| !tuiteiro.getUsuario().equalsIgnoreCase(usuario)) {
				tuiteiro = tuiteiroService.buscarTuiteiroByUsuario(usuario);
				getSession().setAttribute("tuiteiroLogado", tuiteiro);
			}
		} catch (ServiceException e) {
			adicionaMensagemByException(e);
		}
		
		
		return tuiteiro;
	}

	public void setTuiteiro(Tuiteiro tuiteiro) {
		this.tuiteiro = tuiteiro;
	}

	public TuiteiroHomeBean() {
				
	}

	public Publicacao getPublicacao() {
		publicacao = new Publicacao();
		return publicacao;
	}

	public void setPublicacao(Publicacao publicacao) {
		this.publicacao = publicacao;
	}

	public String getMessage() {
		return "I'm alive!";
	}

	public void publicar() {
		try {
			tuiteiro = (Tuiteiro) getSession().getAttribute("tuiteiroLogado");
			publicacao.setTuiteiro(tuiteiro);
			publicacaoService.salvar(publicacao);
			adicionaMensagem("Pronto, agora já foi!!!");
		} catch (ServiceException e) {
			adicionaMensagemByException(e);
		}
	}
	

	public void seguirTuiteiro() {
		try {
			tuiteiro = (Tuiteiro) getSession().getAttribute("tuiteiroLogado");
			tuiteiroService.seguirTuiteiro(seguido, tuiteiro);
			adicionaMensagem("Tuiteiro seguido com sucesso!");
		} catch (ServiceException e) {
			adicionaMensagemByException(e);
		} catch (Exception e) {
			adicionaMensagemByException(e);
		}
	}
	
	public void encurtarUrl(){
		try {
			if(url != null && url.startsWith("http://")){
				url = TinyURLUtils.getTinyUrl(url);
			}else{
				adicionaMensagem("URL Invalida!");
			}
			
		} catch (Exception e) {
			adicionaMensagem("Erro ao Encurtar a URL");
		} 
	}

	public void setPublicacaoService(PublicacaoService publicacaoService) {
		this.publicacaoService = publicacaoService;
	}

	public void setTuiteiroService(TuiteiroService tuiteiroService) {
		this.tuiteiroService = tuiteiroService;
	}
	
	public String getUsuario() {
		return usuario;
	}
	
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	
}